package org.sample.springboot.model;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.sample.springboot.validator.constraints.optional.annotation.AnnotationOptionalConstraint;
import org.sample.springboot.validator.constraints.optional.annotation.EnableMark;
import org.sample.springboot.validator.constraints.optional.annotation.OptionalMark;
import org.sample.springboot.validator.constraints.optional.fieldname.FieldNameOptionalConstraint;
import org.sample.springboot.validator.constraints.optional.provider.ProviderOptionalConstraint;
import org.sample.springboot.validator.group.BusinessGroup;

@FieldNameOptionalConstraint(enableFieldName = "enable", enableValue = true, enableForNull = true, optionalFieldName = "optionalValue", groups = BusinessGroup.class)
@AnnotationOptionalConstraint(enableValue = true, enableForNull = true, name = "homeValidation", groups = BusinessGroup.class)
@ProviderOptionalConstraint(provider = AccountHomeProvider.class, groups = BusinessGroup.class)
public class Account {

	private int id;
	
	@EnableMark(name = "homeValidation")
	private Boolean hasHome;

	@OptionalMark(name = "homeValidation")
	private Address home;

	private Contact[] contacts;

	private List<Contact> contactList;

	private Set<Contact> contactSet;

	private Map<String, Contact> contactMap;

	private ExtraInfo<Contact> extraContact;

	private Map<String, List<Contact>> contactListMap;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Boolean getHasHome() {
		return hasHome;
	}

	public void setHasHome(Boolean hasHome) {
		this.hasHome = hasHome;
	}

	public Address getHome() {
		return home;
	}

	public void setHome(Address home) {
		this.home = home;
	}

	public Contact[] getContacts() {
		return contacts;
	}

	public void setContacts(Contact[] contacts) {
		this.contacts = contacts;
	}

	public List<Contact> getContactList() {
		return contactList;
	}

	public void setContactList(List<Contact> contactList) {
		this.contactList = contactList;
	}

	public Set<Contact> getContactSet() {
		return contactSet;
	}

	public void setContactSet(Set<Contact> contactSet) {
		this.contactSet = contactSet;
	}

	public Map<String, Contact> getContactMap() {
		return contactMap;
	}

	public void setContactMap(Map<String, Contact> contactMap) {
		this.contactMap = contactMap;
	}

	public ExtraInfo<Contact> getExtraContact() {
		return extraContact;
	}

	public void setExtraContact(ExtraInfo<Contact> extraContact) {
		this.extraContact = extraContact;
	}

	public Map<String, List<Contact>> getContactListMap() {
		return contactListMap;
	}

	public void setContactListMap(Map<String, List<Contact>> contactListMap) {
		this.contactListMap = contactListMap;
	}

}
